package com.fled.itsmbigscreen.config;//package com.qike.sky_purchase.config;
//
//import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
//import cn.afterturn.easypoi.excel.entity.ExportParams;
//import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
//import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
//import cn.afterturn.easypoi.excel.export.ExcelExportService;
//import cn.afterturn.easypoi.exception.excel.ExcelExportException;
//import cn.afterturn.easypoi.exception.excel.enums.ExcelExportEnum;
//import cn.afterturn.easypoi.util.PoiPublicUtil;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.poi.ss.usermodel.Workbook;
//
//import java.lang.reflect.Field;
//import java.lang.reflect.InvocationTargetException;
//import java.util.*;
//
///**
// * 自动判断excel宽度
// *
// * @author hujun
// */
//@Slf4j
//public class ExcelExportServiceAuto extends ExcelExportService {
//    @Override
//    public void createSheet(Workbook workbook, ExportParams entity, Class<?> pojoClass, Collection<?> dataSet) {
//        if (LOGGER.isDebugEnabled()) {
//            LOGGER.debug("Excel export start ,class is {}", pojoClass);
//            LOGGER.debug("Excel version is {}",
//                    entity.getType().equals(ExcelType.HSSF) ? "03" : "07");
//        }
//        if (workbook == null || entity == null || pojoClass == null || dataSet == null) {
//            throw new ExcelExportException(ExcelExportEnum.PARAMETER_ERROR);
//        }
//        try {
//            List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>();
//            // 得到所有字段
//            Field[] fileds = PoiPublicUtil.getClassFields(pojoClass);
//            ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class);
//            String targetId = etarget == null ? null : etarget.value();
//            getAllExcelField(entity.getExclusions(), targetId, fileds, excelParams, pojoClass, dataSet);
//            //获取所有参数后,后面的逻辑判断就一致了
//            createSheetForMap(workbook, entity, excelParams, dataSet);
//        } catch (Exception e) {
//            LOGGER.error(e.getMessage(), e);
//            throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e.getCause());
//        }
//    }
//
//    /**
//     * @param exclusions
//     * @param targetId
//     * @param fields
//     * @param excelParams
//     * @param pojoClass
//     * @throws Exception
//     */
//    private void getAllExcelField(String[] exclusions, String targetId, Field[] fields,
//                                  List<ExcelExportEntity> excelParams, Class<?> pojoClass,
//                                  Collection<?> data) throws Exception {
//        super.getAllExcelField(exclusions, targetId, fields, excelParams, pojoClass, null, null);
//        long  start=System.currentTimeMillis();
//        excelParams.forEach(e -> {
//            //只有未设置的默认值才需要自适应
//            if(e.getWidth()==10){
//                if (e.getList() == null) {
//                    setWidth(data, e);
//
//                }else {
//                    e.getList().forEach(child->{
//                        try {
//                            Object invoke = e.getMethod().invoke(data.iterator().next());
//                            if(invoke!=null){
//                                setWidth((Collection<?>) invoke,child);
//                            }
//                        } catch (IllegalAccessException | InvocationTargetException illegalAccessException) {
//                            illegalAccessException.printStackTrace();
//                        }
//                    });
//                }
//            }
//        });
//        log.info("excel自适应耗时"+(System.currentTimeMillis()-start)+"ms");
//    }
//
//    private void setWidth(Collection<?> data, ExcelExportEntity e) {
//        data.stream().limit(10).max(Comparator.comparingDouble(r ->
//        {
//            try {
//                Object invoke = e.getMethod().invoke(r);
//                if(invoke==null){
//                    return -1;
//                }
//                return MatrixToImageWriter.getLength(invoke.toString());
//            } catch (IllegalAccessException | InvocationTargetException illegalAccessException) {
//                illegalAccessException.printStackTrace();
//            }
//            return 0;
//        })).map(r -> {
//            try {
//                Object invoke = e.getMethod().invoke(r);
//                if(invoke==null){
//                    return 0;
//                }
//                int i = MatrixToImageWriter.getLength(invoke.toString())/6;
//                if (i > e.getWidth()) {
//                    log.info("自适应excel宽度");
//                    e.setWidth(i);
//                }
//            } catch (IllegalAccessException | InvocationTargetException illegalAccessException) {
//                illegalAccessException.printStackTrace();
//            }
//            return 0;
//        });
//    }
//
//}
//
